<?php

namespace App\Http\Controllers\rbac;

use App\Http\Controllers\Controller;
use App\Http\Controllers\login\BaseController;
use App\Models\Role;
use Illuminate\Http\Request;
use Illuminate\Pagination\Paginator;
use App\Models\Node;
class RoleController extends BaseController
{


    /**
     * 角色页面
     */
    public function rolePage(Request $request){
        Paginator::useBootstrap();
        $keyword=$request->get('name');
        $data=Role::where('name','like',"%$keyword%")->paginate(2);
        return view('rbac/role_list',compact('data','keyword'));
    }

    /**
     * 角色添加页面
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\think\response\View
     */

    public function createRole(){
        return view('rbac/role_create');

    }
//        添加角色
    public function roleSave(Request $request){
        $post=$request->post();
        $params= $request->validate([
            'name' => 'required',
        ]);
        $res=Role::create($params);
        if ($res){
            return redirect(route('rolePage'));
        }
        return redirect(route('createRole'));
    }

//    分配权限
     public function roleNode(Role $role){
//            dd($role);
        //所有的权限列表
        $data = (new Node())->getNodeAll();

        //当前角色所拥有的权限展示
        //$role->nodes() 相当于当前角色去role_nodes中查询得到所有的权限
        //pluck('node_id'） 把结果集进行一个提取，只需要node_id的数据作为一个新的一维数组
        $roleNode = $role->nodes()->pluck('node_id')->toArray();
        //需要传递当前角色对象
        return view('rbac/role_node', compact('data', 'role','roleNode'));
    }

    /**
     * 角色分配权限的方法
     */
    public function nodeSave(Role $role, Request $request)
    {
        $params = $request->get('node');
        $res = $role->nodes()->sync($params);
        //写入成功，跳转到管理员列表页面
        if ($res) {
            return redirect(route("adminPage"));
        } else {
            //写入失败，还在当前页，来一个友好提示
            return redirect(route("roleNode"))->withErrors("分配权限失败");
        }
    }




}
